package com.xugui.learn.pay.strategy;

import com.xugui.learn.pay.pojo.request.NotifyRequest;
import com.xugui.learn.pay.pojo.request.PayRequest;
import com.xugui.learn.pay.pojo.request.RefundRequest;
import com.xugui.learn.pay.pojo.enums.PayChannel;
import com.xugui.learn.pay.pojo.response.*;

/**
 * 支付策略接口
 */
public interface PayStrategy {

    /**
     * 获取支付渠道接口
     *
     * @return 支付渠道的枚举类
     */
    PayChannel getPayChannel();

    /**
     * 统一支付接口
     *
     * @param request 支付请求参数
     * @return 支付响应参数
     */
    PayResponse pay(PayRequest request);

    /**
     * 查询订单
     *
     * @param request 支付请求参数
     * @return 查询订单响应参数
     */
    QueryResponse queryOrder(PayRequest request);

    /**
     * 关闭订单
     *
     * @param request 支付请求参数
     * @return 关闭订单响应参数
     */
    CloseResponse close(PayRequest request);

    /**
     * 退款
     *
     * @param request 退款请求参数
     * @return 退款响应参数
     */
    RefundResponse refund(RefundRequest request);

    /**
     * 退款查询
     *
     * @param request 退款请求参数
     * @return 退款响应参数
     */
    RefundResponse queryRefund(RefundRequest request);

    /**
     * 处理回调
     *
     * @param request 回调请求参数
     * @return 处理回调响应参数
     */
    NotifyResponse handleNotify(NotifyRequest request);
}
